// 博客相关类型定义
import { GetParam, PushParam, RemoveParam } from './common-api'

// 博客分类
export interface Category {
  id: string
  name: string
  color?: string // 分类颜色
  count?: number // 分类下的文章数量
  children?: Array<Category>
}

// 博客标签（声明，避免循环引用）
export interface Tag {
  id: string
  name: string
  color?: string // 标签颜色
  icon?: string // 标签图标
  blogs?: Blog[]
}

// 博客实体
export interface Blog {
  id: string
  title: string // 标题
  summary?: string // 摘要
  mkContent: string // 正文
  categoryId: string // 分类id
  category?: Category
  tags?: Tag[]
  categories?: Category[]
  topFlag: number // 置顶标记
  status: number // 状态 0-初始 1-发布 2-隐藏
  backgroundImg?: string // 背景图片路径
}

// ==================== 博客API参数类型 ====================

// 博客分页查询参数
export interface BlogPageParam {
  keyword?: string
  status?: string
  pageNum: number
  pageSize: number
}

// 博客保存或更新参数
export interface BlogSaveOrUpdateParam {
  id?: string
  title: string
  topFlag?: number
  categoryId?: string
  mkContent: string
  summary?: string
  tags: string[]
  backgroundImg: string // 背景图片路径
}

// 博客删除参数
export type BlogRemoveParam = RemoveParam

// 博客推送参数
export type BlogPushParam = PushParam

// 博客状态变更参数
export interface BlogStatusChangeParam {
  id: string
  status: 1 | 2 // 1-发布 2-隐藏
}

// 博客置顶参数
export interface BlogTopParam {
  id: string
  topFlag: 0 | 1 // 0-置顶 1-取消
}

// 博客获取参数
export type BlogGetParam = GetParam

// ==================== 分类API参数类型 ====================

// 分类保存或更新参数
export interface CategorySaveOrUpdateParam {
  id: string
  pid: string
  name: string
  color?: string // 分类颜色
}

// 分类删除参数
export type CategoryRemoveParam = RemoveParam

// ==================== 标签API参数类型 ====================

// 标签分页查询参数
export interface TagPageParam {
  name: string
  pageSize: number
  pageNum: number
}

// 标签保存参数
export interface TagSaveParam {
  name: string
  color?: string // 标签颜色
  icon?: string // 标签图标
}

// 标签列表查询参数
export interface TagListParam {
  name?: string
}

// 标签删除参数
export type TagRemoveParam = RemoveParam

// 标签统一更新参数
export interface TagUpdateParam {
  id: string
  color?: string
  icon?: string
}
